package com.niit.mall.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.niit.mall.api.domain.dto.OrderDetailDTO;
import com.niit.mall.common.api.CommonResult;
import com.niit.mall.common.domain.dto.PageDTO;
import com.niit.mall.product.domain.dto.ProductDTO;
import com.niit.mall.product.domain.dto.StockDTO;
import com.niit.mall.product.domain.po.Product;
import com.niit.mall.product.domain.query.ProductQuery;
import com.niit.mall.product.domain.query.ProductSearch;
import com.niit.mall.product.domain.vo.ProductSynthesisVO;
import com.niit.mall.product.domain.vo.ProductVO;

import java.util.List;
import java.util.Map;


/**
 * <p>
 * 商品表 服务类
 * </p>
 *
 * @author ChuXuan
 * @since 2025-05-26
 */
public interface IProductService extends IService<Product> {
	
	boolean updateStock(StockDTO stockDTO);

    /**
     * 分页查询商品信息
     * @param query 商品查询条件
     * @return 商品列表
     */
    PageDTO<ProductDTO> queryProductByPage(ProductQuery query);
    PageDTO<ProductVO> searchProductByPage(ProductSearch query);

	List<ProductDTO> queryItemByIds(List<Long> ids);
	
	void deductStock(List<OrderDetailDTO> items);

    /**
     * 获取商品分页和品牌、分类列表
     * @return 商品分页和品牌、分类列表
     */
    ProductSynthesisVO queryProductAndBrandAndCategoryList(ProductQuery query);

    /**
     * 查询商品信息VO(包含逻辑删除的商品)
     * @param id 商品ID
     * @return 商品信息VO
     */
    ProductDTO queryByIdLogic(Long id);

    /**
     * 新增商品
     * @param productDTO 商品信息
     * @return 新增结果
     */
    void addProduct(ProductDTO productDTO);

    Map<String, List<String>> querySpecsById(Long id);


    void reduceStock(Map<Long, Integer> productIdToQuantityMap);
}
